맨위로가기

응용 프로그램 이진 인터페이스

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

응용 프로그램 이진 인터페이스(ABI)는 응용 프로그램이 운영 체제나 라이브러리와 상호 작용하는 방식을 정의하는 인터페이스이다. ABI는 프로세서의 명령어 집합, 자료형의 크기, 호출 규약, 시스템 호출 방법, 바이너리 형식 등을 포함한다. 완전한 ABI는 다른 시스템 간 프로그램의 수정 없이 실행을 가능하게 하며, C++ 이름 장식이나 예외 처리와 같은 세부 사항을 표준화할 수도 있다. 임베디드 시스템을 위한 EABI는 파일 형식, 자료형, 레지스터 사용, 스택 프레임 구성 등을 정의하며, 성능 최적화에 중점을 둔다. 한국에서는 유닉스 계열 운영체제 간의 ABI 공통화 시도가 있었으나 성공하지 못했으며, 리눅스 표준 기반(LSB)과 OCMP(Open Computing Environment for MIPS Platform)와 같은 노력이 있었다.

더 읽어볼만한 페이지

  • API - Tk (소프트웨어)
    Tk는 Tcl 스크립팅 언어의 크로스 플랫폼 GUI 툴킷으로, 다양한 플랫폼 이식과 여러 프로그래밍 언어 바인딩을 지원하며 사용자 정의 가능한 위젯들을 제공한다.
  • API - ASIO
    ASIO는 독일 스타인버그에서 개발한 오디오 입출력 API 규격으로, 낮은 지연 시간과 멀티 채널 I/O를 지원하며 윈도우 운영체제에서 주로 사용된다.
  • 운영체제 기술 - 프로세스
    프로세스는 컴퓨터에서 실행되는 프로그램의 인스턴스로, 운영 체제가 시스템 자원을 효율적으로 관리하며 멀티태스킹 환경에서 독립적인 실행 흐름을 유지한다.
  • 운영체제 기술 - 커널 (컴퓨팅)
    커널은 운영 체제의 핵심으로, 하드웨어와 소프트웨어 간 상호 작용을 관리하며 시스템 보안, 자원 관리, 하드웨어 추상화, 프로세스 스케줄링, 프로세스 간 통신, 다중 작업 환경 지원 등의 기능을 제공하고, 모놀리식, 마이크로, 혼합형 커널 등으로 구현되며 가상화 및 클라우드 컴퓨팅 환경에서 중요성이 커지고 있다.
  • 컴퓨터에 관한 - 고속 패킷 접속
    고속 패킷 접속(HSPA)은 3세대 이동통신(3G)의 데이터 전송 속도를 높이는 기술 집합체로, 고속 하향/상향 패킷 접속(HSDPA/HSUPA)을 통해 속도를 개선하고 다중 안테나, 고차 변조, 다중 주파수 대역 활용 등의 기술로 진화했으나, LTE 및 5G 기술 발전으로 현재는 상용 서비스가 중단되었다.
  • 컴퓨터에 관한 - 데이터베이스
    데이터베이스는 여러 사용자가 공유하고 사용하는 정보의 집합으로, 데이터베이스 관리 시스템을 통해 접근하며, 검색 및 갱신 효율을 높이기 위해 고도로 구조화되어 있고, 관계형, NoSQL, NewSQL 등 다양한 모델로 발전해왔다.
응용 프로그램 이진 인터페이스

2. ABI의 정의 및 구성 요소

ABI는 응용 프로그램이 운영체제나 다른 라이브러리와 어떻게 상호작용하는지를 정의한다. ABI는 다음과 같은 세부 사항을 다룬다.[1]


  • 프로세서의 명령 집합, 레지스터 파일 구조, 스택 구성, 메모리 접근 유형 등
  • 프로세서가 접근 가능한 기본 자료형의 크기, 레이아웃, 정렬
  • 호출 규약: 함수의 인수가 전달되고 반환 값이 검색되는 방식
  • 모든 매개변수가 스택으로 전달되는지, 일부가 레지스터로 전달되는지 여부
  • 어떤 레지스터가 어떤 함수 매개변수에 사용되는지
  • 스택으로 전달된 첫 번째 함수 매개변수가 먼저 푸시되는지, 마지막으로 푸시되는지 여부
  • 함수 호출 후 스택을 정리하는 책임이 호출자에게 있는지, 피호출자에게 있는지 여부
  • 응용 프로그램이 운영 체제에 시스템 호출을 하는 방법, 시스템 호출 번호
  • 완전한 운영 체제 ABI의 경우, 오브젝트 파일, 프로그램 라이브러리 등의 바이너리 형식


인텔 바이너리 호환성 표준(iBCS)과 같은 완전한 ABI는[1] 해당 ABI를 지원하는 한 운영 체제의 프로그램이 필요한 공유 라이브러리가 존재하고 유사한 전제 조건이 충족되면 다른 모든 시스템에서 수정 없이 실행될 수 있도록 한다.

임베디드 시스템을 위한 ''임베디드 응용 프로그램 이진 인터페이스''(EABI)는 파일 형식, 데이터 유형, 레지스터 사용, 스택 프레임 구성, 임베디드 시스템 소프트웨어 프로그램의 함수 매개변수 전달에 대한 표준 규칙을 지정하며, 임베디드 운영체제와 함께 사용된다.[4] EABI는 임베디드 시스템의 제한된 자원 내에서 성능을 최적화하도록 설계되어, 복잡한 운영 체제에서 커널과 사용자 코드 사이에 이루어지는 대부분의 추상화를 생략한다. 예를 들어 동적 연결을 피하고, 고정된 레지스터 사용을 가능하게 한다.[4]

널리 사용되는 EABI에는 PowerPC[4], Arm EABI[7]MIPS EABI가 있다.[8]

2. 1. 정의

ABI는 다음을 포함한다.[10]

분류내용
CPU명령어 집합, 엔디안 등
데이터자료형, 크기, 배치 (정렬) 등
호출 규약함수의 인수가 어떻게 전달되고, 반환값이 어떻게 전달되는지를 정의한 것
시스템 호출시스템 호출 번호와 구체적인 시스템 호출 메커니즘
실행 파일 및 라이브러리상세한 포맷 (UNIX라면 COFF 또는 ELF 등)



C++의 이름 장식[11] 또는 예외 전파[12] 및 호출 규약과 같이 동일한 플랫폼상의 컴파일러 간의 ABI도 존재하지만, 플랫폼 간의 호환성까지 요구되지는 않는다.

2. 2. 구성 요소

ABI는 다음과 같은 내용을 정의한다.[10]

구분내용
CPU명령어 집합, 엔디안 등
데이터자료형, 크기, 배치(정렬) 등
호출 규약함수의 인수가 어떻게 전달되고, 반환값이 어떻게 전달되는지를 정의한 것
시스템 호출시스템 호출 번호와 구체적인 시스템 호출의 메커니즘
실행 파일 및 라이브러리상세한 포맷 (UNIX라면 COFF 또는 ELF 등)



C++의 이름 장식[11] 또는 예외의 전파[12] 및 호출 규약과 같은 다른 ABI도 있지만, 이는 동일한 플랫폼상의 컴파일러 간의 ABI이며, 플랫폼 간의 호환성까지 요구되지는 않는다.

3. EABI (임베디드 ABI)

'''EABI'''(임베디드 응용 프로그램 이진 인터페이스, embedded-application binary interface)는 임베디드 시스템 소프트웨어 프로그램의 파일 형식, 자료형, 레지스터 사용, 스택 프레임 조직, 함수 매개변수 전달 등에 대한 표준 규칙을 정의한다. EABI는 임베디드 운영체제와 함께 사용되며, 임베디드 시스템의 제한된 자원 내에서 성능을 최적화하도록 설계되어 일반적인 운영체제 ABI와는 차이가 있다.

3. 1. EABI의 특징

EABI를 지원하는 컴파일러는 다른 컴파일러가 만든 코드와 호환되는 목적 코드를 생성하므로, 개발자들은 서로 다른 컴파일러로 만들어진 목적 코드와 라이브러리를 연결할 수 있다.[19] 어셈블리어 코드를 직접 작성하는 개발자들은 EABI를 통해 호환 컴파일러가 생성한 어셈블리 코드와 상호 작용할 수 있다.

일반 목적의 운영 체제에서 사용되는 ABI와 EABI의 주요 차이점은 다음과 같다.[19]

  • 응용 프로그램 코드 내에서 권한 명령을 실행할 수 있다.
  • 동적 링크가 필요하지 않다. (동적 링크를 허용하지 않는 경우도 있다.)
  • 메모리 절약을 위해 더 작은 스택 프레임을 사용한다.


EABI는 임베디드 시스템의 제한된 자원 내에서 성능을 최적화하도록 설계되었다. 널리 쓰이는 EABI로는 파워피씨[20]ARM 아키텍처[21][22]가 있다.

3. 2. 주요 EABI

널리 쓰이는 EABI로는 파워피씨[20], ARM 아키텍처[21][22], MIPS EABI[8]가 있다.

4. ABI와 플랫폼 간 호환성

완전한 ABI (예: 인텔 바이너리 호환성 표준(iBCS))는[1] 해당 ABI를 지원하는 운영 체제의 프로그램이 필요한 공유 라이브러리의 존재 등 전제 조건이 충족되면 다른 모든 시스템에서 수정 없이 실행될 수 있도록 보장한다.

ABI는 C++ 이름 장식,[2] 예외 전파,[3] 및 동일한 플랫폼의 컴파일러 간 호출 규칙과 같은 세부 사항을 표준화할 수 있지만, 플랫폼 간 호환성을 강제하지는 않는다.

5. 한국의 ABI 표준화 노력

유닉스 계열 운영체제에서는 동일 하드웨어 플랫폼에서 여러 운영체제가 동작하여 호환성 문제가 발생한다.[1]

RISC 칩을 사용하는 경우, 다음과 같은 운영체제 예시가 있다.

마이크로프로세서 계열운영체제 예시
POWER 계열AIX 5L / Solaris 10g / 리눅스
MIPS 계열UX/4800 / Irix
아이테니엄 계열HP-UX / 리눅스


5. 1. 유닉스 계열 운영체제의 ABI 공통화 시도

유닉스 계열 운영체제에서는 동일한 하드웨어 플랫폼에서 호환되지 않는 여러 운영체제가 동작한다. 예를 들어 IA-32 계열은 가장 호환되는 유닉스 계열 운영체제가 많다. 이러한 운영체제 간에 ABI를 정의하여 서로 애플리케이션이 동작하도록 하려는 시도가 몇 차례 있었으나, 성공한 적은 없다. 리눅스에서는 리눅스 표준 기반(LSB)이 비슷한 시도를 하고 있다 (LSB는 ABI 외에도 많은 규정을 시도하고 있다).[1]

한편, 채용 벤더 수가 많고 여러 유닉스 계열 운영체제가 난립했던 MIPS 계열에서는 여러 번 ABI의 공통화를 목표로 하는 시도가 이루어졌다.[1]

예를 들어, 1990년대 중반~후반에 걸쳐 유닉스 워크스테이션 / 서버에서 MIPS 계열 CPU를 채용한 NEC (NEC, UX/4800), 소니(NEWS), 스미토모 전기공업 (NEC로부터의 OEM 제품인 EWS4800 등과 SUMIStation), 일본 탠덤 컴퓨터 (MIPS 계열이었던 NonStopServer)에 의한 OCMP (Open Computing Environment for MIPS Platform)가 정의되어, 점유율 유지 등 일정 수준의 성과를 거두었다. OCMP는 MIPS-ABI의 일본어 대응 측면과 AP 버스의 표준화에 의한 주변 장치의 공통화 측면이 있다.[1]

5. 2. 리눅스 표준 기반 (LSB)

리눅스에서는 리눅스 표준 기반(LSB)이 ABI 표준화를 포함한 다양한 규정을 시도하고 있다.

1990년대 중반~후반에 걸쳐 유닉스 워크스테이션/서버에서 MIPS 계열 CPU를 채용한 NEC(UX/4800), 소니(NEWS), 스미토모 전기공업(EWS4800 등, SUMIStation), 일본 탠덤 컴퓨터(MIPS 계열이었던 NonStopServer)에 의해 OCMP(Open Computing Environment for MIPS Platform)가 정의되어 점유율 유지 등 일정 수준의 성과를 거두었다. OCMP는 MIPS-ABI의 일본어 대응 측면과 AP 버스의 표준화에 의한 주변 장치의 공통화 측면이 있다.

5. 3. OCMP (Open Computing Environment for MIPS Platform)

1990년대 중반~후반에 걸쳐 유닉스 워크스테이션/서버에서 MIPS 계열 CPU를 채용한 NEC (UX/4800), 소니(NEWS), 스미토모 전기공업 (NEC로부터의 OEM 제품인 EWS4800 등)과 일본 탠덤 컴퓨터 (MIPS 계열이었던 NonStopServer)에 의해 OCMP (Open Computing Environment for MIPS Platform)가 정의되어, 점유율 유지 등 일정 수준의 성과를 거두었다. OCMP는 MIPS-ABI의 일본어 대응 측면과 AP 버스의 표준화에 의한 주변 장치의 공통화 측면이 있다.

참조

[1] 웹사이트 Intel Binary Compatibility Standard (iBCS) http://www.everythin[...]
[2] 웹사이트 Itanium C++ ABI https://itanium-cxx-[...]
[3] 웹사이트 Itanium C++ ABI: Exception Handling http://itanium-cxx-a[...]
[4] 서적 PowerPC Embedded Application Binary Interface: 32-Bit Implementation http://www.nxp.com/d[...] Freescale Semiconductor, Inc 1995-10-01
[5] 웹사이트 Debian ARM accelerates via EABI port https://web.archive.[...] Linuxdevices.com 2007-10-11
[6] 웹사이트 Why ARM's EABI matters https://web.archive.[...] Linuxdevices.com 2007-10-11
[7] 웹사이트 ABI for the Arm Architecture https://developer.ar[...] Developer.arm.com 2020-02-04
[8] 간행물 mips eabi documentation https://sourceware.o[...] 2020-06-19
[9] 웹사이트 ArmEabiPort https://wiki.debian.[...]
[10] 웹사이트 Intel Binary Compatibility Standard (iBCS) http://www.everythin[...]
[11] 웹사이트 Itanium C++ ABI http://www.codesourc[...]
[12] 웹사이트 Itanium C++ ABI: Exception Handling http://www.codesourc[...]
[13] 서적 PowerPC Embedded Application Binary Interface: 32-Bit Implementation http://www.freescale[...] Freescale Semiconductor, Inc 1995-10-01
[14] 웹사이트 "PowerPC Embedded Processors Application Note" http://www.ibm.com/c[...]
[15] 웹사이트 EABI2 http://infocenter.ar[...]
[16] 웹사이트 MIPS EABI http://www.cygwin.co[...]
[17] 웹사이트 Debian ARM accelerates via EABI port http://linuxdevices.[...] Linuxdevices.com 2007-10-11
[18] 웹사이트 Why ARM's EABI matters http://linuxdevices.[...] Linuxdevices.com 2007-10-11
[19] 웹사이트 http://ftp.twaren.ne[...]
[20] 웹사이트 http://www.ibm.com/c[...]
[21] 웹인용 Debian ARM accelerates via EABI port - News - Linux for Devices http://linuxdevices.[...] 2009-12-23
[22] 웹인용 Why ARM's EABI matters - Linux For Devices Articles - Linux for Devices http://linuxdevices.[...] 2007-10-11



본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.

문의하기 : help@durumis.com